// 对存储的的数据进行加密解密 使用AES 加密 进行加密
const CryptoJS = require('crypto-js');
export default class LocalStorage {
  private aseKey: string;
  private autoEncrypt: boolean;
  constructor() {
    this.autoEncrypt = true // 是否进行加密
    this.aseKey = 'jiulingreact'
  }
  // 加密
  AesEncrypt(v:any) {
    return CryptoJS.AES.encrypt(v, CryptoJS.enc.Utf8.parse(this.aseKey), { // 传入加密的字段
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    }).toString()
  }

  // 解密
  AesDecode(v:any) {
    return CryptoJS.AES.decrypt(v, CryptoJS.enc.Utf8.parse(this.aseKey), {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8)
  }

  setItem(key: string, value: any) { // 传入加密的名称和值
    var v = value
    if (this.autoEncrypt) {
      v = this.AesEncrypt(v)
    }
    localStorage.setItem(key, v) // 将传入的值加入本地存储
  }

  getItem(key:string) {
    let v = localStorage.getItem(key) // 通过key获取value值
    if(v) { // 如果value有值
      if (this.autoEncrypt) {
        return this.AesDecode(v) // 进行解密
      } else {
        return v
      }
    } else {
      return '' // 如果没有值返回空
    }
  }
}
